﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using DYU_Crypt;
using System.Collections;

namespace DataLayer.Class
{
    public class Kullanici : IOperable
    {
        int kullaniciNo;
        string ad;
        string soyad;
        string sifre;
        int yetki;
        IAuthStrategy yetkiStratejisi;
        DateTime eklenmeTarihi;
        KullaniciDB kullaniciDB = new KullaniciDB();
        

        public Kullanici()
        {
            kullaniciNo = 0;
            ad = null;
            soyad = null;
            sifre = null;
            yetki = -1;
            eklenmeTarihi = DateTime.Now;
        }

        public Kullanici(int kullaniciNo, string ad, string soyad, string sifre, int yetki)
        {
            this.kullaniciNo = kullaniciNo;
            this.ad = ad;
            this.soyad = soyad;
            this.sifre = new DYU_Crypt.GeneralCryptology(sifre).beginCryptology();
            //this.sifre = new GeneralCryptology().
            this.yetki = yetki;
            eklenmeTarihi = DateTime.Now.Date;
            this.YetkiStratejisi = AuthStrategyFactory.createAuthStrategy(yetki);
            
        }

        public Kullanici(int kullaniciNo, string sifre)
        {
            // TODO: Complete member initialization
            this.kullaniciNo = kullaniciNo;
            this.sifre = new DYU_Crypt.GeneralCryptology(sifre).beginCryptology();

        }


        public DateTime EklenmeTarihi
        {
            get { return eklenmeTarihi; }
            set { eklenmeTarihi = value; }
        }

        public int Yetki
        {
            get { return yetki; }
            set { yetki = value; }
        }

        public string Sifre
        {
            get { return sifre; }
            set { sifre = value; }
        }


        public string Soyad
        {
            get { return soyad; }
            set { soyad = value; }
        }

        public int KullaniciNo
        {
            get { return kullaniciNo; }
            set { kullaniciNo = value; }
        }
        

        public string Ad
        {
            get { return ad; }
            set { ad = value; }
        }

        public IAuthStrategy YetkiStratejisi
        {
            get { return yetkiStratejisi; }
            set { yetkiStratejisi = value; }
        }

        public void ekle()
        {
            kullaniciDB.kullaniciEkle(this);
        }

        public void sil()
        {
            kullaniciDB.kullaniciSil(this.KullaniciNo);
        }

        public void guncelle()
        {
            kullaniciDB.kullaniciDuzenle(this);
        }
        public ArrayList yetkileriBelirle()
        {
            return this.YetkiStratejisi.authorize();
        }
    }
}
